//
// Created by iguilty on 2022-01-13.
//

#ifndef DESIGN_PATTERN_CPP_ABSTRACTION_H
#define DESIGN_PATTERN_CPP_ABSTRACTION_H

class AbstractionImp;
class Abstraction {
public:
    virtual ~Abstraction();
    virtual void Operation()=0;
protected:
    Abstraction();
};

class RefinedAbstraction:public Abstraction{
public:
    RefinedAbstraction(AbstractionImp* imp);
    ~RefinedAbstraction();
    void Operation();

private:
    AbstractionImp* _imp;
};

#endif //DESIGN_PATTERN_CPP_ABSTRACTION_H
